Q: Mac OS X 10.2 Ç≈ÇÕÅAÅuÉlÉbÉgÉèÅ[ÉNÅvä¬ã´ê›íËÉpÉlÉãÇ… Secure Web ÉvÉçÉLÉV (HTTPS) Çê›íËÇ∑ÇÈêVǵǢÉtÉBÅ[ÉãÉhÇ™í«â¡Ç≥ÇÍǃǢNjÇ∑ÅBInternet Config API Çí Ç∂ǃDZÇÍÇÁÇÃê›íËílÇéÊìæÇ∑ÇÈï˚ñ@ÇÕǻǢÇÊǧÇ≈Ç∑ÅBDZÇÍÇÁÇÃÉtÉBÅ[ÉãÉhÇ…ÉAÉNÉZÉXÇ∑ÇÈÇ…ÇÕǫǧǵÇΩÇÁÇÊÇ¢Ç≈ǵÇÂǧǩÅH
A: åªéûì_Ç≈ÇÕÅAInternet Config API Çí Ç∂ǃ HTTPS ÉvÉçÉLÉVÇ…ä÷Ç∑ÇÈèÓïÒÇéÊìæÇ∑ÇÈï˚ñ@ÇÕdžÇËÇ‹ÇπÇÒÅBë„ÇÌÇËÇ…ÅASystem Configuration ÉtÉåÅ[ÉÄÉèÅ[ÉNÇ©ÇÁDZÇÃèÓïÒÇì«Ç›çûÇfiïKóvǙdžÇËÇ‹Ç∑ÅB
íçãLÅF ëΩÇ≠ÇÃì_Ç≈ÅAMac OS X Çà Internet Config API ÇÕÅAå›ä∑ê´Çï€éùÇ∑ÇÈÇΩÇflÇà API Ç≈Ç∑ÅBDZÇÃÇΩÇfläÓî’ÇΔÇ»ÇÈ APIÅiDZÇÃèÍçáÇÕ System Configuration ÉtÉåÅ[ÉÄÉèÅ[ÉNÅjÇ…êVǵǢã@î\Ç™í«â¡Ç≥ÇÍÇΩÇΔÇ´Ç…ÅAǪÇÍÇÁÇ™å›ä∑ê´Çï€éùÇ∑ÇÈÇΩÇflÇà APIÅiInternet ConfigÅjDžLJëgÇ›çûÇ‹ÇÍÇÈÇΔÇÕå¿ÇËÇ‹ÇπÇÒÅBDZÇÍÇ™ãñóeÇ≈Ç´ÇÈÇÃÇÕÅAInternet Config ÉxÅ[ÉXÇÃä˘ë∂ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÇ¢Ç∏ÇÍLJÅAäÓî’ÇΔÇ»ÇÈ API Ç…í«â¡Ç≥ÇÍÇΩã@î\ÇëzíËǵǃǢǻǢÇΩÇflÇ≈Ç∑ÅB |
System Configuration ÉtÉåÅ[ÉÄÉèÅ[ÉNÇ©ÇÁDZÇÃèÓïÒÇíºê⁄éÊìæÇ≈Ç´Ç‹Ç∑ÅBé¿ç€Ç…ÅADZÇÍÇé¿çsÇ∑ÇÈÇÃÇ…ìKǵÇΩÅASCDynamicStoreCopyProxies ÇΔǢǧçÇÉåÉxÉãÇà API Ç™ë∂ç›ÇµÇ‹Ç∑ÅBÇ®égÇ¢ÇÃÉvÉçÉOÉâÉÄÇ≈DZÇà API ÇégópÇ∑ÇÈÇ…ÇÕÅAÅuSystemConfiguration.frameworkÅvÇÉvÉçÉWÉFÉNÉgÇ…í«â¡ÇµÅA<SystemConfiguration/SystemConfiguration.h> ÉwÉbÉ_ÇÉCÉìÉNÉãÅ[ÉhǵNjÇ∑ÅBDZǧÇ∑ÇÈDZÇΔÇ≈ÅAÉäÉXÉg 1 Ç…é¶Ç∑ÇÊǧDž SCDynamicStoreCopyProxies ÇåƒÇ—èoÇπÇ‹Ç∑ÅB
ÉäÉXÉg 1. SCDynamicStoreCopyProxies ÇÃégóp |
Boolean GetHTTPSProxySetting(char *host, size_t hostSize, UInt16 *port)
// C ÇÃï∂éöóÒÇΔǵǃÅihost ÇΔ hostSize Ç…ÇÊǡǃéwíËÇ≥ÇÍÇÈÉoÉbÉtÉ@Ç…Åj
// åªç›Çà HTTPS ÉvÉçÉLÉVê›íËÇΔÅAÉ|Å[Égî‘çÜÇï‘Ç∑
{
Boolean result;
CFDictionaryRef proxyDict;
CFNumberRef enableNum;
int enable;
CFStringRef hostStr;
CFNumberRef portNum;
int portInt;
assert(host != NULL);
assert(port != NULL);
// ÉfÉBÉNÉVÉáÉiÉäÇéÊìæ
proxyDict = SCDynamicStoreCopyProxies(NULL);
result = (proxyDict != NULL);
// óLå¯âªÉtÉâÉOÇéÊìæÅBDZÇÍÇÕÅACFBoolean Ç≈ÇÕÇ»Ç≠ CFNumber
if (result) {
enableNum = (CFNumberRef) CFDictionaryGetValue(proxyDict,
kSCPropNetProxiesHTTPSEnable);
result = (enableNum != NULL)
&& (CFGetTypeID(enableNum) == CFNumberGetTypeID());
}
if (result) {
result = CFNumberGetValue(enableNum, kCFNumberIntType,
&enable) && (enable != 0);
}
// ÉvÉçÉLÉVÇÃÉzÉXÉgÇéÊìæÅBDNS ñºÇÕ ASCII ï∂éöÇ≈Ç»ÇØÇÍnjǻÇÁǻǢÅB
// ÅuÉlÉbÉgÉèÅ[ÉNÅvä¬ã´ê›íËÉpÉlÉãÇÃÅuSecure Web ÉvÉçÉLÉVÅvÉtÉBÅ[ÉãÉh
// ASCII à»äOÇÃï∂éöÇì¸óÕÇ∑ÇÈÇΔÅACFStringGetCString ä÷êîÇÕé∏îsǵǃ
// false Çï‘Ç∑
if (result) {
hostStr = (CFStringRef) CFDictionaryGetValue(proxyDict,
kSCPropNetProxiesHTTPSProxy);
result = (hostStr != NULL)
&& (CFGetTypeID(hostStr) == CFStringGetTypeID());
}
if (result) {
result = CFStringGetCString(hostStr, host,
(CFIndex) hostSize, kCFStringEncodingASCII);
}
// ÉvÉçÉLÉVÇÃÉ|Å[ÉgÇéÊìæ
if (result) {
portNum = (CFNumberRef) CFDictionaryGetValue(proxyDict,
kSCPropNetProxiesHTTPSPort);
result = (portNum != NULL)
&& (CFGetTypeID(portNum) == CFNumberGetTypeID());
}
if (result) {
result = CFNumberGetValue(portNum, kCFNumberIntType, &portInt);
}
if (result) {
*port = (UInt16) portInt;
}
// ÉNÉäÅ[ÉìÉAÉbÉv
if (proxyDict != NULL) {
CFRelease(proxyDict);
}
if ( ! result ) {
*host = 0;
*port = 0;
}
return result;
}
|
ÉäÉXÉg 1 ÇÕÅAHTTPS ÉvÉçÉLÉVê›íËÇéÊìæÇ∑ÇÈï˚ñ@ÇÃÇ›Çé¶ÇµÇƒÇ¢Ç‹Ç∑ÅBproxyDict ÉfÉBÉNÉVÉáÉiÉäDždžÇÈëºÇÃÉLÅ[Çí≤Ç◊ÇÈDZÇΔÇ…ÇÊǡǃÅAëºÇÃÉvÉçÉLÉVê›íËÇéÊìæÇ≈Ç´Ç‹Ç∑ÅBê›íËDžǬǢǃÇÃè⁄ç◊ÇÕÅA<SystemConfiguration/SCSchemaDefinitions.h> ÉwÉbÉ_ÉtÉ@ÉCÉãÇÃÉRÉÅÉìÉgÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
[2003 îN 2 åé 6 ì˙]
|